package com.guoxin.chapter2.innnertest2;

/**
 * @author guoxin
 * @date 2019年8月20日
 */
public class OutClass {
	static class InnerClass1 {
		public void method1(InnerClass2 class2) {
			String threadName = Thread.currentThread().getName();
			synchronized (class2) {
				System.out.println(threadName + " 进入了InnerClass1 类中的 method1 方法");
				for (int i = 1; i < 10; i++) {
					System.out.println(Thread.currentThread().getName() + " i=" + i);
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				System.out.println(threadName + " 离开了InnerClass1 类中的 method1 方法");
			}
		}

		public synchronized void method2() {
			String threadName = Thread.currentThread().getName();
			System.out.println(threadName + " 进入了InnerClass1 类中的 method2 方法");
			for (int j = 1; j < 10; j++) {
				System.out.println(Thread.currentThread().getName() + " j=" + j);
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			System.out.println(threadName + " 离开了InnerClass1 类中的 method2 方法");
		}
	}

	static class InnerClass2 {
		public synchronized void method1() {
			String threadName = Thread.currentThread().getName();
			System.out.println(threadName + " 进入了InnerClass2 类中的 method1 方法");
			for (int k = 1; k < 10; k++) {
				System.out.println(Thread.currentThread().getName() + " k=" + k);
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			System.out.println(threadName + " 离开了InnerClass2 类中的 method1 方法");
		}
	}

}
